package IOC;

import org.junit.Test;

import java.util.stream.Stream;

/**
 * @author chenyuan
 * @date 2020/11/19 10:34
 */
public class IOCTest2 {
    @Test
    public void test() throws Exception {
        UserController userController = new UserController();
        // 获得 userController 对于的 Class 对象
        Class<? extends UserController> clazz = userController.getClass();
        // 使用流式计算，遍历所有的 field 属性
        Stream.of(clazz.getDeclaredFields()).forEach(field -> {
            // 获取 AutoWired 注解
            AutoWired annotation = field.getAnnotation(AutoWired.class);
            // 判断是否存在 AutoWired 注解
            if (annotation != null){
                field.setAccessible(true);
                // 获取属性的类型
                Class<?> type = field.getType();
                try {
                    // 根据属性的类型创建对应的对象
                    Object o = type.newInstance();
                    // 设置 field 属性的值为 刚创建的类型对象
                    field.set(userController, o);
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        });

        System.out.println(userController.getUserService());
    }
}
